<?php
namespace App\Http\Controllers\Api\v1\Astro;
use App\Http\Controllers\Api\BaseController;
use App\Http\Controllers\Api\v1\Astro\NatalController;

use DB;
/**
 * 福点记分
 * Class Fortunescore
 * @package app\astro\controller
 */
class FortunescoreController extends BaseController
{
    private $astro;
    private $fort;

    public function __construct()
    {
        parent::filter_xss();
        if(!defined('IS_ACCESS_TOKEN_CHECKED'))
        {
            parent::__construct();// 接口调用验证
        }
        $Natal = new NatalController();
        $this->astro = json_decode($Natal->get(),true)['data'];

        $this->get_fort();
        if(isset($this->astro['planets'][FORT]))
        {
            $this->fort = $this->astro['planets'][FORT];
        }
    }

    private function get_fort($year = 1993)
    {
        $sign_score = 0;
        $house_score = 0;
        $phase_score = 0;
        $star_score = 0;
        $asc = $this->astro['planets'][ASC]['deg'];
        $sun = $this->astro['planets'][0]['deg'];
        $moon = $this->astro['planets'][1]['deg'];
        $day = ($this->astro['planets'][0]['in_house_id'] > 6) ? true : false;// 是否为日间盘
        $fort = ($day) ? ($asc + $moon - $sun) : ($asc - $moon + $sun);
        if($fort >= 360) $fort -= 360;
        elseif($fort < 0) $fort += 360;

        $in_sign_id = InWhichSign($fort);
        $in_sign_deg = $fort - ( $in_sign_id - 1 ) * 30;

        ###################
        // 福点位于金牛座或双鱼座(+5)
        if(in_array($in_sign_id,[2,12]))
        {
            $sign_score += 5;
        }
        // 福点在天秤、射手、狮子或巨蟹(+4)
        elseif(in_array($in_sign_id,[7,9,5,4]))
        {
            $sign_score += 4;
        }
        // 福点在双子(+3)
        elseif($in_sign_id == 3)
        {
            $sign_score += 3;
        }
        // 福点在天蝎、摩羯或水瓶(-5)
        elseif(in_array($in_sign_id,[8,10,11]))
        {
            $sign_score += 4;
        }
        // 福点在白羊(0)
        elseif($in_sign_id == 1)
        {
            $sign_score += 0;
        }
        // 福点在处女时
        elseif($in_sign_id == 6)
        {
            // 合金星和木星守护的界(+2)
            if($in_sign_deg >= 17 && $in_sign_deg < 28)
            {
                $sign_score += 2;
            }
        }
        // 福点合金星和木星界(+6)
        if(
            // 白羊座
            (
                $in_sign_id == 1
                &&
                (
                    ($in_sign_deg >= 0 && $in_sign_deg < 6)
                    || ($in_sign_deg >= 6 && $in_sign_deg < 12)
                )
            )
            ||
            // 金牛座
            (
                $in_sign_id == 2
                &&
                (
                    ($in_sign_deg >= 0 && $in_sign_deg < 8)
                    || ($in_sign_deg >= 14 && $in_sign_deg < 22)
                )
            )
            ||
            // 双子座
            (
                $in_sign_id == 3
                &&
                (
                    ($in_sign_deg >= 12 && $in_sign_deg < 17)
                    || ($in_sign_deg >= 6 && $in_sign_deg < 12)
                )
            )
            ||
            // 巨蟹座
            (
                $in_sign_id == 4
                &&
                (
                    ($in_sign_deg >= 7 && $in_sign_deg < 13)
                    || ($in_sign_deg >= 19 && $in_sign_deg < 26)
                )
            )
            ||
            // 狮子座
            (
                $in_sign_id == 5
                &&
                (
                    ($in_sign_deg >= 0 && $in_sign_deg < 6)
                    || ($in_sign_deg >= 6 && $in_sign_deg < 11)
                )
            )
            ||
            // 天秤座
            (
                $in_sign_id == 7
                &&
                (
                    ($in_sign_deg >= 21 && $in_sign_deg < 28)
                    || ($in_sign_deg >= 14 && $in_sign_deg < 21)
                )
            )
            ||
            // 天蝎座
            (
                $in_sign_id == 8
                &&
                (
                    ($in_sign_deg >= 7 && $in_sign_deg < 11)
                    || ($in_sign_deg >= 19 && $in_sign_deg < 24)
                )
            )
            ||
            // 射手座
            (
                $in_sign_id == 9
                &&
                (
                    ($in_sign_deg >= 12 && $in_sign_deg < 17)
                    || ($in_sign_deg >= 0 && $in_sign_deg < 12)
                )
            )
            ||
            // 摩羯座
            (
                $in_sign_id == 10
                &&
                (
                    ($in_sign_deg >= 14 && $in_sign_deg < 22)
                    || ($in_sign_deg >= 7 && $in_sign_deg < 14)
                )
            )
            ||
            // 水瓶座
            (
                $in_sign_id == 11
                &&
                (
                    ($in_sign_deg >= 7 && $in_sign_deg < 13)
                    || ($in_sign_deg >= 13 && $in_sign_deg < 20)
                )
            )
            ||
            // 双鱼座
            (
                $in_sign_id == 12
                &&
                (
                    ($in_sign_deg >= 0 && $in_sign_deg < 12)
                    || ($in_sign_deg >= 12 && $in_sign_deg < 16)
                )
            )
        )
        {
            $sign_score += 6;
        }
        // 福点部分合土星或火星守护的界(-5)
        if(
            // 白羊座
            (
                $in_sign_id == 1
                &&
                (
                    ($in_sign_deg >= 20 && $in_sign_deg < 25)
                    || ($in_sign_deg >= 25 && $in_sign_deg < 30)
                )
            )
            ||
            // 金牛座
            (
                $in_sign_id == 2
                &&
                (
                    ($in_sign_deg >= 27 && $in_sign_deg < 30)
                    || ($in_sign_deg >= 22 && $in_sign_deg < 27)
                )
            )
            ||
            // 双子座
            (
                $in_sign_id == 3
                &&
                (
                    ($in_sign_deg >= 17 && $in_sign_deg < 24)
                    || ($in_sign_deg >= 24 && $in_sign_deg < 30)
                )
            )
            ||
            // 巨蟹座
            (
                $in_sign_id == 4
                &&
                (
                    ($in_sign_deg >= 0 && $in_sign_deg < 7)
                    || ($in_sign_deg >= 26 && $in_sign_deg < 30)
                )
            )
            ||
            // 狮子座
            (
                $in_sign_id == 5
                &&
                (
                    ($in_sign_deg >= 24 && $in_sign_deg < 30)
                    || ($in_sign_deg >= 11 && $in_sign_deg < 18)
                )
            )
            ||
            // 处女座
            (
                $in_sign_id == 6
                &&
                (
                    ($in_sign_deg >= 21 && $in_sign_deg < 28)
                    || ($in_sign_deg >= 28 && $in_sign_deg < 30)
                )
            )
            ||
            // 天秤座
            (
                $in_sign_id == 7
                &&
                (
                    ($in_sign_deg >= 28 && $in_sign_deg < 30)
                    || ($in_sign_deg >= 0 && $in_sign_deg < 6)
                )
            )
            ||
            // 天蝎座
            (
                $in_sign_id == 8
                &&
                (
                    ($in_sign_deg >= 0 && $in_sign_deg < 7)
                    || ($in_sign_deg >= 24 && $in_sign_deg < 30)
                )
            )
            ||
            // 射手座
            (
                $in_sign_id == 9
                &&
                (
                    ($in_sign_deg >= 26 && $in_sign_deg < 30)
                    || ($in_sign_deg >= 21 && $in_sign_deg < 26)
                )
            )
            ||
            // 摩羯座
            (
                $in_sign_id == 10
                &&
                (
                    ($in_sign_deg >= 26 && $in_sign_deg < 30)
                    || ($in_sign_deg >= 22 && $in_sign_deg < 26)
                )
            )
            ||
            // 水瓶座
            (
                $in_sign_id == 11
                &&
                (
                    ($in_sign_deg >= 20 && $in_sign_deg < 25)
                    || ($in_sign_deg >= 25 && $in_sign_deg < 30)
                )
            )
            ||
            // 双鱼座
            (
                $in_sign_id == 12
                &&
                (
                    ($in_sign_deg >= 19 && $in_sign_deg < 28)
                    || ($in_sign_deg >= 28 && $in_sign_deg < 30)
                )
            )
        )
        {
            $sign_score -= 5;
        }
        ###################


        $in_house_id = $this->InWhichHouse($fort,$this->astro['houses']);
        #########################
        if($in_house_id == 1 || $in_house_id == 10)
        {
            $house_score += 5;
        }
        elseif($in_house_id == 4 || $in_house_id == 7 || $in_house_id == 11)
        {
            $house_score += 4;
        }
        elseif($in_house_id == 2 || $in_house_id == 5)
        {
            $house_score += 3;
        }
        elseif($in_house_id == 9)
        {
            $house_score += 2;
        }
        elseif($in_house_id == 3)
        {
            $house_score += 1;
        }
        elseif($in_house_id == 12)
        {
            $house_score -= 5;
        }
        elseif($in_house_id == 6 || $in_house_id == 8)
        {
            $house_score -= 4;
        }
        #############################

        if(abs($sun - $fort) > 270)
        {
            if($sun > $fort) $dist = $fort + 360 - $sun;
            else $dist = $sun + 360 - $fort;
        }
        else
        {
            $dist = abs($sun - $fort);
        }
        $burn = false;// 是否灼伤
        if($dist > 17/60 && $dist <= 15) $burn = true; // 灼伤 8.5 或在日光下 15
        #########################################
//        foreach ($this->astro['planets'])
//        {
//
//        }
        #########################################

        $fort_star = [];
        $diff = ($year *1 -2000)*0.83/60;
        // 计算恒星 每一百年移动83′ 每年0.83分
        foreach(config('astrolog.star') as $s)
        {
            $star = $s[0] + $diff;
            if(abs($fort-$star) <= 1)
            {
                $s_s = [
                    'deg'=>$star,
                    'name'=>$s[1],
                    'auspicious'=>$s[6],// 吉凶状态  凶 平 吉 大吉
                ];

                $fort_star[] = $s_s;
            }
        }


    }

    /**
     * 行星落宫
     * @param int 1-12
     *
     */
    private function InWhichHouse($longitude = 0,$house = array())
    {
        $house[13]['deg'] = $house[1]['deg'];
        $in_house = 12;
        for ($j=1; $j <= 12; $j++)
        {
            $pl = $longitude + (1 / 36000);
            $h_now = $house[$j]['deg'];
            $h_next = $house[$j+1]['deg'];

            if ($j < 12 && $h_now > $h_next)
                if (($pl >= $h_now && $pl < 360) || ($pl < $h_next && $pl >= 0)) $in_house = $j;
            if ($j == 12 && ($h_now > $house[1]['deg']))
                if (($pl >= $h_now && $pl < 360) || ($pl < $house[1]['deg'] && $pl >= 0)) $in_house = $j;
            if (($pl >= $h_now) && ($pl < $h_next && ($j < 12))) $in_house = $j;
            if (($pl >= $h_now) && ($pl < $house[1]['deg']) && ($j == 12)) $in_house = $j;
        }
        return $in_house;
    }

    public function init()
    {
        if($this->fort)
        {
            $sign = $this->get_sign_score();
            $house = $this->get_house_score();
            $phase = $this->get_phase_score();
            $star = $this->get_star_score();
        }
        else
        {
            echo json_encode(['code'=>10911,'msg'=>'Fortune is not exist.']);
            exit;
        }
    }

    public function get_sign_score()
    {
        $score = 0;
        $fort = $this->fort;
        echo "<pre>";
        print_r($fort);

    }

    public function get_house_score()
    {

    }

    public function get_phase_score()
    {

    }

    public function get_star_score()
    {

    }
}
